package cn.share.life.system.util.excelMath;

import lombok.Data;

import java.io.Serializable;

@Data
public class BaseEntity implements Serializable {
    // 总投资	万元
    private double totalInvestment = 1680000; // 总投资
    // 资本金	万元
    private double capital; // 资本金
    public double getCapital() {
        return totalInvestment * capitalRatio / 100;
    }

    // 长期贷款余额	万元
    private double longTermLoanBalance; // 长期贷款余额
    public double getLongTermLoanBalance() {
        return totalInvestment * (1 - capitalRatio / 100);
    }

    // 长期贷款利率	%
    private double longTermLoanRate = 0.0465; // 长期贷款利率
    // 剩余还贷年限	年
    private int remainingLoanYears = 20; // 剩余还贷年限
    // 输电电量	亿千瓦时
    private double transmissionElectricity; // 输电电量
    public double getTransmissionElectricity() {
        // =I7*F11/10^4*(1-F12)
        return (transmissionCapacity * designUtilizationHours)/ 10000 * (1 - lineLoss);
    }

    // 设计利用小时数	小时
    private int designUtilizationHours = 5000; // 设计利用小时数
    // 线路损耗	%
    private double lineLoss = 0.065; // 线路损耗
    // 折旧年限	年
    private int depreciationYears = 35; // 折旧年限
    // 资本金比率	%
    private double capitalRatio = 20; // 资本金比率
    // 年还本付息额	万元
    private double annualPrincipalAndInterest; // 年还本付息额

    // 折旧率	%
    private double depreciationRate; // 折旧率
    public double getDepreciationRate() {
        return (1 - 0.05) / depreciationYears; // 假设折旧率为线性折旧
    }

    // 输电容量	万千瓦
    private double transmissionCapacity = 800; // 输电容量
    // 容量电价	元/千瓦.年
    private double capacityPrice = 0; // 容量电价
    // 资本金回报率	IRR(%)
    private double capitalReturnRate = 0.043; // 资本金回报率
    // 输电电价	元/千千瓦时
    private double transmissionPrice = 47.39; // 输电电价
    // 运维费率	%
    private double operationMaintenanceRate = 0.028; // 运维费率
    // 增值税率	%
    private double valueAddedTaxRate = 0.13; // 增值税率
    // 税金附加比率	%
    private double taxSurchargeRate = 0.1; // 税金附加比率

    // 材料费	万元
    private double materialCost; // 材料费
    public double getMaterialCost() {
        return totalInvestment * 0.008;
    }

    // 大修理费	万元
    private double majorRepairCost; // 大修理费
    public double getMajorRepairCost() {
        return totalInvestment * 0.01;
    }

    // 其他费用	万元
    private double otherCosts; // 其他费用
    public double getOtherCosts() {
        return totalInvestment * 0.01;
    }

    // 综合运营成本	万元
    private double totalOperatingCost; // 综合运营成本
    public double getTotalOperatingCost() {
        return totalInvestment * 0.028;
    }

    // 材料费	万元
    private double materialCost2; // 材料费
    public double getMaterialCost2() {
        return getMaterialCost() * operationMaintenanceRate / 0.028;
    }
    // 大修理费	万元
    private double majorRepairCost2; // 大修理费
    public double getMajorRepairCost2() {
        return getMajorRepairCost() * operationMaintenanceRate / 0.028;
    }
    // 其他费用	万元
    private double otherCosts2; // 其他费用
    public double getOtherCosts2() {
        return getOtherCosts() * operationMaintenanceRate / 0.028;
    }
    // 综合运营成本	万元
    private double totalOperatingCost2; // 综合运营成本
    public double getTotalOperatingCost2() {
        return getTotalOperatingCost() * operationMaintenanceRate/ 0.028;
    }

    // 后续投资
    private double subsequentInvestment = 50000; // 后续投资
    // 投资年份
    private int investmentYear = 5; // 投资年份
}
